/**
 * NOTE:
 * 前端与客户端通信
 * 基于webSocket封装，异步通信方法
 */
// import Vue from 'vue';
import status from '../store/modules/status.js'

 const host = "127.0.0.1:28410";

 const webS = new WebSocket(`ws://${host}`);

 const webSkOpen = ( ) => {
    return new Promise((resolve, reject) => {
        webS.onopen = () => {
            resolve ('webSocket 通信连接成功！');
        };
        webS.error = () => {
            reject ('webSocket 通信连接失败！');
        };
    });
 };

 const webSkListen = () => {
    return new Promise((resolve) => {
        webS.onmessage = (evt) => {
            if(evt){
                if(evt.data){
                    if(JSON.parse(evt.data)){
                        // console.log('onmessage', evt, JSON.parse(evt.data) );
                        // console.log('onmessage', Vue, status );

                        // 触发快捷键截图
                        if(JSON.parse(evt.data).cmd === 'screenshot' && JSON.parse(evt.data).code === 1 ){
                            status.mutations.setScreenKeyStatus(status.state, 1 );
                        }
                        // esc 取消截图
                        else if(JSON.parse(evt.data).cmd == 'screenshot_over' && JSON.parse(evt.data).code === 2){
                            status.mutations.setScreenKeyStatus(status.state, 2 );
                        }

                        resolve (JSON.parse(evt.data));
                    }
                    else{
                        resolve (null);
                    }
                }
                else{
                    resolve (null);
                }
            }
            else{
                resolve (null);
            }
        };
    });
 };

 const webSkAsync = (data = '') => {
    // console.log('send', data);
    return new Promise((resolve, reject) => {
        webS.send(JSON.stringify(data));

        webSkListen().then( evtData => {
            // console.log('webSkAsync', evtData);
            resolve ( evtData );
        });

        webS.error = () => {
            // console.log('webSocket 通信失败！');
            reject ('error');
        };
    });
 };

 const webClose = () =>{
    return new Promise((resolve, reject) => {
        webS.close = () => {
            resolve ('webSocket 通信关闭成功！');
        };
        webS.error = () => {
            reject ('webSocket 通信关闭失败！');
        };
    });
 };


 export { webSkOpen, webSkAsync, webSkListen, webClose }


//  注释 19.8.1
// webS.onmessage = (evt) => {
//     console.log('onmessage', evt);
//     if(evt){
//         if(evt.data){
//             if(JSON.parse(evt.data)){
//                 resolve (JSON.parse(evt.data));
//             }
//             else{
//                 resolve (null);
//             }
//         }
//         else{
//             resolve (null);
//         }
//     }
//     else{
//         resolve (null);
//     }
// };

// 定义监听事件 暂时用不上
// Vue.prototype.resetSetItem = function (key, newVal) {
//   console.log(key, newVal, (key === 'screenStatus') );
//   if (key === 'screenStatus') {
//       // 创建一个StorageEvent事件
//       var newStorageEvent = document.createEvent('StorageEvent');
//       const storage = {
//           setItem: function (k, val) {
//               localStorage.setItem(k, val);

//               // 初始化创建的事件
//               newStorageEvent.initStorageEvent('setItem', false, false, k, null, val, null, null);

//               // 派发对象
//               window.dispatchEvent(newStorageEvent)
//           }
//       }
//       return storage.setItem(key, newVal);
//   }
// }
